/**
 * UniPush 消息推送工具类
 */
export default {
  /**
   * 初始化推送服务
   */
  init() {
    // #ifdef APP-PLUS
    this.getClientId().then(clientId => {
      console.log('UniPush ClientID:', clientId);
    });
    
    // 监听推送消息
    this.listenPushMessage();
    
    // 监听透传消息
    this.listenTransmitMessage();
    
    // 监听点击通知
    this.listenClickNotification();
    // #endif
  },
  
  /**
   * 显示本地通知
   * @param {Object} options 通知选项
   */
  showLocalNotification(options = {}) {
    // #ifdef APP-PLUS
    const notification = {
      title: options.title || '提示',
      content: options.content || '',
      payload: options.payload || {},
      when: options.delay ? new Date().getTime() + options.delay : new Date().getTime()
    };

    // 创建本地通知
    plus.push.createMessage(
      notification.content,
      notification.payload,
      {
        title: notification.title,
        when: notification.when
      }
    );
    // #endif
  },
  
  /**
   * 获取推送标识
   */
  getClientId() {
    // #ifdef APP-PLUS
    return new Promise((resolve) => {
      plus.push.getClientInfoAsync((info) => {
        console.log('推送服务信息:', info);
        resolve(info);
      }, (error) => {
        console.error('获取推送标识失败:', error);
        resolve(null);
      });
    });
    // #endif
    
    // #ifndef APP-PLUS
    return Promise.resolve(null);
    // #endif
  },
  
  /**
   * 监听推送消息
   */
  listenPushMessage() {
    // #ifdef APP-PLUS
    plus.push.addEventListener('receive', (msg) => {
      console.log('收到推送消息:', msg);
      
      // 处理推送消息
      this.handlePushMessage(msg);
    });
    // #endif
  },
  
  /**
   * 监听透传消息
   */
  listenTransmitMessage() {
    // #ifdef APP-PLUS
    plus.push.addEventListener('receive', (msg) => {
      // 处理透传消息（Android）
      if (msg.payload) {
        console.log('收到透传消息:', msg.payload);
        this.handleTransmitMessage(msg.payload);
      }
    });
    
    // 处理透传消息（iOS）
    plus.push.addEventListener('click', (msg) => {
      if (msg.payload) {
        console.log('点击透传消息通知:', msg.payload);
        this.handleTransmitMessage(msg.payload);
      }
    });
    // #endif
  },
  
  /**
   * 监听点击通知
   */
  listenClickNotification() {
    // #ifdef APP-PLUS
    plus.push.addEventListener('click', (msg) => {
      console.log('点击通知:', msg);
      
      // 处理点击通知事件
      this.handleClickNotification(msg);
    });
    // #endif
  },
  
  /**
   * 处理推送消息
   * @param {Object} msg 推送消息
   */
  handlePushMessage(msg) {
    // 可以在这里处理推送消息，比如显示在页面上
    uni.$emit('push-message', msg);
  },
  
  /**
   * 处理透传消息
   * @param {Object} payload 透传消息内容
   */
  handleTransmitMessage(payload) {
    try {
      // 解析透传消息
      const data = typeof payload === 'string' ? JSON.parse(payload) : payload;
      
      // 根据消息类型处理
      if (data.type === 'notification') {
        // 发送本地通知
        this.sendLocalNotification(data);
      } else if (data.type === 'job') {
        // 定时任务相关消息
        this.handleJobMessage(data);
      } else if (data.type === 'message') {
        // 普通消息通知
        this.handleMessageNotification(data);
      } else {
        // 其他类型消息
        uni.$emit('transmit-message', data);
      }
    } catch (error) {
      console.error('解析透传消息失败:', error);
    }
  },
  
  /**
   * 处理点击通知事件
   * @param {Object} msg 通知消息
   */
  handleClickNotification(msg) {
    try {
      // 如果通知携带了自定义数据
      if (msg.payload) {
        const payload = typeof msg.payload === 'string' ? JSON.parse(msg.payload) : msg.payload;
        // 根据 payload 数据执行相应操作
        uni.$emit('click-notification', payload);
      }
    } catch (error) {
      console.error('处理点击通知失败:', error);
    }
  },
  
  /**
   * 发送本地通知（用于透传消息转通知）
   * @param {Object} data 通知数据
   */
  sendLocalNotification(data) {
    // #ifdef APP-PLUS
    const options = {
      title: data.title || '系统通知',
      content: data.content || '',
      payload: data.payload || data
    };
    
    // 创建本地通知
    plus.push.createMessage(options.content, options.payload, {
      title: options.title
    });
    // #endif
  },
  
  /**
   * 处理定时任务消息
   * @param {Object} data 任务数据
   */
  handleJobMessage(data) {
    // 发送本地通知
    this.sendLocalNotification({
      title: data.title || '定时任务提醒',
      content: data.content || data.jobName,
      payload: data
    });
    
    // 触发全局事件
    uni.$emit('job-notification', data);
  },
  
  /**
   * 处理普通消息通知
   * @param {Object} data 消息数据
   */
  handleMessageNotification(data) {
    // 发送本地通知
    this.sendLocalNotification({
      title: data.title || '新消息',
      content: data.content || data.message || '您有一条新消息',
      payload: data
    });
    
    // 触发全局事件
    uni.$emit('message-notification', data);
  },
  
  /**
   * 设置推送标签
   * @param {Array} tags 标签数组
   */
  setTags(tags) {
    // #ifdef APP-PLUS
    plus.push.addEventListener('receive', (msg) => {
      console.log('收到推送消息:', msg);
    });
    
    // 实际设置标签需要服务端配合
    console.log('设置推送标签:', tags);
    // #endif
  },
  
  /**
   * 删除推送标签
   * @param {Array} tags 标签数组
   */
  removeTags(tags) {
    // #ifdef APP-PLUS
    console.log('删除推送标签:', tags);
    // #endif
  }
}